package com.basker.pisces.core.meta.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.basker.pisces.core.meta.IDataField;

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.FIELD, ElementType.METHOD})
public @interface ReferenceField {

    public static final String FULL = "REF_FULL";

    /**
     * 数据成员映射数据表的字段名
     *
     * @return
     */
    String dbFieldName() default "";

    /**
     * 字段在详细描述
     *
     * @return
     * @see IDataField#getDescription()
     */
    String description() default "";

    /**
     * 显示名称
     *
     * @return
     * @see IDataField#getDisplayName()
     */
    String displayName() default "";

    /**
     * 是否是索引字段,用于生成DDL语句
     *
     * @return
     * @see IDataField#isIndexField()
     */
    boolean indexField() default false;

    /**
     * 成员的名称,为空的话会按照POJO规范取方法的属性名
     *
     * @return
     * @see IDataField#getName()
     */
    String name() default "";

    /**
     * 需要引用的属性，如果为空，默认只会引入Id、代码和名称字段，特别的，如果为{@link ReferenceField#FULL},则引入完整对象，当关联对象很小时，这是一个合适的选择
     *
     * @return
     */
    String[] refFields() default {};

    /**
     * 字段在数据表中的顺序
     *
     * @return
     */
    int sort() default 0;

    /**
     * 所属表名，如果是主表可以省略
     *
     * @return
     */
    String tableName() default "";

}
